import axios from 'axios'
import router from '@/router'
import { ElMessage,ElLoading } from 'element-plus'
import 'element-plus/theme-chalk/el-message.css'
import { useUserStore } from '@/stores/userStore'
import {rabbitSvg} from './rabbitSvg'
const http = axios.create({
  baseURL: 'https://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 50000 // 请求超时时间
})
//添加loading实例
let loadingInstance;
// 添加请求拦截器
http.interceptors.request.use(function (config) {
  //1.从pinia中获取token
  const userStore = useUserStore()
  //2.在请求头中添加token
  const token = userStore.userInfo.token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  //3.显示loading
  loadingInstance = ElLoading.service({
    background: 'rgba(255, 255, 255, 0.7)',
    spinner:rabbitSvg,
  })
  return config;
}, function (error) {
  //关闭loading
  loadingInstance.close()
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response) {
  // 请求成功后隐藏 loading
  loadingInstance.close();
  // 对响应数据做点什么
  return response;
}, function (error) {
  // 请求成功后隐藏 loading
  loadingInstance.close();
  //1.从pinia中获取token
  const userStore = useUserStore()
  // 统一错误提示    
  if (error.response) {
    // 请求已发出，服务器以状态码进行响应
    // 可以根据不同的状态码设置不同的错误提示
    switch (error.response.status) {
      case 400:
        ElMessage({
          message: '请求参数错误',
          type: 'error'
        })
        break;
      case 401:
        ElMessage({
          message: '未授权，请登录',
          type: 'error'
        })
        //清除数据
        userStore.clearUserInfo()
        //跳转登录页面
        router.push('/login')
        break;
      case 403:
        ElMessage({
          message: '无权限访问',
          type: 'error'
        })
        break;
      case 404:
        ElMessage({
          message: '请求的资源未找到',
          type: 'error'
        })
        break;
      case 500:
        ElMessage({
          message: '服务器内部错误',
          type: 'error'
        })
        break;
      // 可以根据需要添加更多状态码处理逻辑
      default:
        errorMessage = '请求失败，请稍后再试';
    }
  } else if (error.request) {
    router.push('/404')
    // 请求已经发出了，但没有收到响应
    ElMessage({
      message: '网络错误，请稍后再试',
      type: 'error'
    })
  } else {
    // 发生了其他错误
    ElMessage({
      message: '未知错误，请稍后再试',
      type: 'error'
    })
  }
  return Promise.reject(error);
});

export default http